/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.servico;

import br.com.foxinline.modelo.FolhaPagamento;
import br.com.foxinline.modelo.ItemFolhaPagamento;
import br.com.foxinline.modelo.Pessoa;
import br.com.foxinline.modelo.Secretaria;
import br.com.foxinline.util.Caracter;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author laverson
 */
@Stateless
public class FolhaPagamentoServico extends ServicoGenerico<FolhaPagamento> {

    @EJB
    PessoaServico pessoaServico;
    @EJB
    UsuarioServico usuarioServico;

    public FolhaPagamentoServico() {
        super(FolhaPagamento.class);
    }

    @Override
    public void salvar(FolhaPagamento entity) {
        entity.setDataCadastro(new Date());
        entity.setUsuario(usuarioServico.getCurrentUser());

        if (entity.getItensFolhaPagamento() != null && !entity.getItensFolhaPagamento().isEmpty()) {
            for (ItemFolhaPagamento item : entity.getItensFolhaPagamento()) {
                if (item.getPessoa().getId() == null) {
                    Pessoa pessoa = item.getPessoa();
                    pessoaServico.salvar(pessoa);
                    item.setPessoa(pessoa);
                }
            }
        }

        super.salvar(entity);
    }

    public List<FolhaPagamento> pesquisar(FolhaPagamento pagamento, Pessoa pessoa) {
        String sql = "Select p from FolhaPagamento p";

        Secretaria secretaria = pagamento.getSecretaria();

        if (secretaria != null && secretaria.getId() != null) {
            sql += " JOIN p.secretaria s";
        }

        Pessoa funcionario = pessoa;
        funcionario.setCpf(Caracter.removecaracter(funcionario.getCpf()));
        funcionario.setCnpj(Caracter.removecaracter(funcionario.getCnpj()));

        if ((funcionario.getNome() != null && !funcionario.getNome().equals(""))
                || (funcionario.getCpf() != null && !funcionario.getCpf().equals(""))
                || (funcionario.getRg() != null && !funcionario.getRg().equals(""))
                || (funcionario.getNomeFantasia() != null && !funcionario.getNomeFantasia().equals(""))
                || (funcionario.getCnpj() != null && !funcionario.getCnpj().equals(""))) {
            sql += " JOIN p.itensFolhaPagamento item ";
            sql += " JOIN item.pessoa f ";
        }

        sql += " where ";

        if (secretaria != null && secretaria.getId() != null) {
            sql += " JOIN s.id = :secretariaId";
        }

        if (pagamento.getDataFolhaPagamento() != null) {
            sql += " p.dataFolhaPagamento = :dataFolhaPagamento AND ";
        }

        if (funcionario.getNome() != null && !funcionario.getNome().equals("")) {
            funcionario.setNome(funcionario.getNome().replace(" ", "%"));
            sql += " lower(f.nome) LIKE lower(:nome) AND ";
        }
        if (funcionario.getCpf() != null && !funcionario.getCpf().equals("")) {
            sql += " lower(f.cpf) LIKE lower(:cpf) AND ";
        }
        if (funcionario.getRg() != null && !funcionario.getRg().equals("")) {
            sql += " lower(f.rg) LIKE lower(:rg) AND ";
        }
        if (funcionario.getNomeFantasia() != null && !funcionario.getNomeFantasia().equals("")) {
            funcionario.setNomeFantasia(funcionario.getNomeFantasia().replace(" ", "%"));
            sql += " lower(f.nomeFantasia) LIKE lower(:nomeFantasia) AND ";
        }
        if (funcionario.getCnpj() != null && !funcionario.getCnpj().equals("")) {
            sql += " lower(f.cnpj) LIKE lower(:cnpj) AND ";
        }
        sql += " 1=1 ";

        System.err.println(sql);

        Query query = getEntityManager().createQuery(sql);

        if (pagamento.getDataFolhaPagamento() != null) {
            query.setParameter("dataFolhaPagamento", pagamento.getDataFolhaPagamento());
        }

        if (secretaria != null && secretaria.getId() != null) {
            query.setParameter("secretariaId", secretaria.getId());
        }

        if (funcionario.getNome() != null && !funcionario.getNome().equals("")) {
            query.setParameter("nome", "%" + funcionario.getNome() + "%");
        }
        if (funcionario.getCpf() != null && !funcionario.getCpf().equals("")) {
            query.setParameter("cpf", funcionario.getCpf());
        }
        if (funcionario.getRg() != null && !funcionario.getRg().equals("")) {
            query.setParameter("rg", funcionario.getRg());
        }
        if (funcionario.getNomeFantasia() != null && !funcionario.getNomeFantasia().equals("")) {
            query.setParameter("nomeFantasia", "%" + funcionario.getNomeFantasia() + "%");
        }
        if (funcionario.getCnpj() != null && !funcionario.getCnpj().equals("")) {
            query.setParameter("cnpj", funcionario.getCnpj());
        }

        return query.getResultList();
    }

}
